// https://www.acwing.com/problem/content/837/

#include <iostream>
#include <string>

using namespace std;

// 前缀树（trie）的模板题

const int MAX_ARRAY_SIZE = 1e5 + 5;
// 用于存储所有的结点数据，比如 第一次写入 abc 时候，将会占用三个位置，再次写入 abd 时，仅占用一个字符
int nodes[MAX_ARRAY_SIZE][26];
// 记录以某个结点为结束的字符串的个数，比如 abc abc 那么以 endCnt [nodes[3]['c'-'a']] 的数目为 2
int endCnt[MAX_ARRAY_SIZE];
// idx 用来记录出去重复结点外总共需要申请的空间结点数目，比如 ["abc", "abd"] 总共需占用4个结点，["abc", "aabc"] 需要占用 6 个结点
int idx;

void Insert(const string& word) {
    int p = 0;
    for (const char ch: word) {
        int num = ch - 'a';
        if (nodes[p][num] == 0) {
            nodes[p][num] = ++idx;
        }
        p = nodes[p][num];
    }
    endCnt[p]++;
}

int Query(const string& word) {
    int p = 0;
    for (const char ch: word) {
        int num = ch - 'a';
        if (nodes[p][num] == 0) {
            return 0;
        }
        p = nodes[p][num];
    }
    return endCnt[p];
}

int main() {
    int n;
    char ch;
    string word;
    cin>>n;
    for (int i=0; i<n; i++) {
        cin>>ch>>word;
        if (ch == 'I') {
            Insert(word);
        } else if (ch == 'Q') {
            cout<<Query(word)<<endl;
        }
    }
    return 0;
}
